package vo;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;

import util.HibernateUtil;

public class ClienteDAO {
	public void salvarCliente(ClienteVO cliente) {

		Transaction transaction = null;

		Session session = HibernateUtil.currentSession();
		transaction = session.beginTransaction();

		PessoaVO pessoa = cliente.getPessoaVO();
		session.saveOrUpdate(pessoa);
		cliente.setIdpessoa(pessoa.getId());
		session.saveOrUpdate(cliente);

		transaction.commit();

	}

	public void excluir(ClienteVO cliente) {
		Transaction transaction = null;

		Session session = HibernateUtil.currentSession();
		transaction = session.beginTransaction();

		session.delete(cliente);
		session.delete(cliente.getPessoaVO());

		transaction.commit();
	}

	@SuppressWarnings("unchecked")
	public List<ClienteVO> consultarClienteFisico(ClienteVO clienteVO) {

		List<ClienteVO> listaDeCliente = new ArrayList<ClienteVO>();

		Transaction transaction = null;

		Session session = HibernateUtil.currentSession();
		transaction = session.beginTransaction();

		Criteria query = session.createCriteria(ClienteVO.class);

		query.createAlias("pessoaVO", "pessoaVO");
		if (clienteVO.getPessoaVO().getNome() != null
				&& !clienteVO.getPessoaVO().getNome().equals("")) {
			query.add(Restrictions.like("pessoaVO.nome", clienteVO
					.getPessoaVO().getNome()+"%"));
		}

		listaDeCliente = query.list();

		transaction.commit();

		List<ClienteVO> listaAuxiliar = new ArrayList<ClienteVO>();
		for (ClienteVO v : listaDeCliente) {
			if (v.getPessoaVO().getCpf() != null) {
				if (v.getPessoaVO().getCpf().length() > 0) {
					listaAuxiliar.add(v);
				}
			}
		}

		return listaAuxiliar;
	}
	
	
	
	
	
	
	
	@SuppressWarnings("unchecked")
	public List<ClienteVO> consultarClienteJuridico(ClienteVO clienteVO) {
		
		List<ClienteVO> listaDeCliente = new ArrayList<ClienteVO>();
		
		Transaction transaction = null;
		
		Session session = HibernateUtil.currentSession();
		transaction = session.beginTransaction();
		
		Criteria query = session.createCriteria(ClienteVO.class);
		
		query.createAlias("pessoaVO", "pessoaVO");
		if (clienteVO.getPessoaVO().getNome() != null
				&& !clienteVO.getPessoaVO().getNome().equals("")) {
			query.add(Restrictions.ilike("pessoaVO.nome", clienteVO
					.getPessoaVO().getNome()));
		}
		
		listaDeCliente = query.list();
		
		transaction.commit();
		
		List<ClienteVO> listaAuxiliar = new ArrayList<ClienteVO>();
		for (ClienteVO v : listaDeCliente) {
			if (v.getPessoaVO().getCnpj() != null) {
				if (v.getPessoaVO().getCnpj().length() > 0) {
					listaAuxiliar.add(v);
				}
			}
		}
		
		return listaAuxiliar;
	}
	@SuppressWarnings("unchecked")
	public List<ClienteVO> consultarCliente(ClienteVO clienteVO) {
		
		List<ClienteVO> listaDeCliente = new ArrayList<ClienteVO>();
		
		Transaction transaction = null;
		
		Session session = HibernateUtil.currentSession();
		transaction = session.beginTransaction();
		
		Criteria query = session.createCriteria(ClienteVO.class);
		
		query.createAlias("pessoaVO", "pessoaVO");
		if (clienteVO.getPessoaVO().getNome() != null
				&& !clienteVO.getPessoaVO().getNome().equals("")) {
			query.add(Restrictions.ilike("pessoaVO.nome", clienteVO
					.getPessoaVO().getNome()));
		}
		
		listaDeCliente = query.list();
		
		transaction.commit();
		
		
		
		
		return listaDeCliente;
	}


}
